package com.xigua._高级数据结构或系统;

/**
 * @author LiRongHua
 * @Title: ${file_name}
 * @Package ${package_name}
 * @Description: Trie（发音类似 "try"）或者说 前缀树 是一种树形数据结构，用于高效地存储和检索字符串数据集中的键。
 * 这一数据结构有相当多的应用情景，例如自动补完和拼写检查。*请你实现 Trie 类：
 *Trie() 初始化前缀树对象。
 *void insert(String word) 向前缀树中插入字符串 word 。
 *boolean search(String word) 如果字符串 word 在前缀树中，返回 true（即，在检索之前已经插入）；否则，返回 false 。
 *boolean startsWith(String prefix) 如果之前已经插入的字符串 word 的前缀之一为 prefix ，返回 true ；否则，返回 false 。
 *
 * @date 2022/3/1717:32
 */
public class _208_实现Trie前缀树 {

    public static void main(String[] args) {
        Trie trie = new Trie();
        trie.insert("apple");
        trie.search("apple");
        trie.search("app");
        trie.startsWith("app");
        trie.insert("app");
        trie.search("app");

    }

}

//class Trie {
//
//    private boolean isEnd;
//    private Trie[] child;
//
//    public Trie() {
//        isEnd = false;
//        child = new Trie[26];
//    }
//
//    public void insert(String word) {
//        Trie trie = this;
//        int length = word.length();
//        for (int i = 0; i < length; i++) {
//            char ch = word.charAt(i);
//            int index = ch - 'a';
//            if (trie.child[index] == null){
//                trie.child[index] = new Trie();
//            }
//            trie = trie.child[index];
//        }
//        trie.isEnd = true;
//    }
//
//    public boolean search(String word) {
//        return searchPrefix(word) != null &&  searchPrefix(word).isEnd;
//    }
//
//    public boolean startsWith(String prefix) {
//        return searchPrefix(prefix) != null;
//    }
//
//    private Trie searchPrefix(String prefix) {
//        Trie trie = this;
//        for (int i = 0; i < prefix.length(); i++) {
//            int index = prefix.charAt(i) - 'a';
//            if (trie.child[index] == null) return null;
//            trie = trie.child[index];
//        }
//        return  trie;
//    }
//}
//

